ferror関数は、ファイルポインタで示されるストリームのエラーの状態を調べます。

#include <stdio.h>
int ferror(FILE *stream);

*streamはfopen関数で取得した、ファイルポインタを指定します。

戻り値として、エラーであれば0以外の値を返します。

入力関数の多くはEOF(end of file)あるいは、エラーを検出したらEOF値を返しますので、EOFなのかエラーなのか分かりません。そのような場合に、ferror関数でエラーの状態か否かを調べることができます。

プログラム 例

#include <stdio.h>

int main(void)
{
  FILE    *fp;
  int     in_data;

  if ((fp = fopen('temp.txt', 'r')) != NULL) {
    while((in_data = fgetc(fp)) != EOF) {
      putchar(in_data);
    }

    if (ferror(fp) != 0) {
      printf('入力エラーです\n');
    }
    else {
      printf('正常に入力しました\n');
    }

    fclose(fp);
  }
  else {
    printf('ファイルのオープンに失敗しました\n');
  }

  return 0;
}

例の実行結果

$ cat temp.txt
Hello World!!.
$
$ ./ferror.exe
Hello World!!.
正常に入力しました
$